package com.amos.doublewriterconsistence.listen;

import com.amos.doublewriterconsistence.thread.RequestThreadPool;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * Copyright © 2018 五月工作室. All rights reserved.
 *
 * @Package com.amos.common.listener
 * @ClassName InitThreadLocalPoolListen
 * @Description 系统初始化监听器 初始队列
 * @Author Amos
 * @Modifier
 * @Date 2019/7/14 16:44
 * @Version 1.0
 **/
public class InitThreadLocalPoolListen implements ServletContextListener {

    /**
     * ServletContextListener
     * 1）what：  监听ServletContext对象被创建或被销毁的Servlet监听器
     * 2）how：> 创建一个实现了ServletContextListener的类，并且实现其中的两个方法
     * 3）why：ServletContextListener 是最常用的Listener，
     * 可以在当前web应用被加载时对当前web应用的相关资源进行初始化操作：
     * 创建数据库连接池，创建Spring的IOC容器，读取当前WEB应用的初始化参数。。。
     * 4) API:　
     *
     */

    /**
     * 系统初始化队列
     *
     * @param sce
     */
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        //ServletContext对象被创建(即，当前WEB应用被加载时)的时候，Servlet容器调用该方法。

        /**
         * 初始化工作线程池和内存队列
         *
         * servlet容器在实例化RequestThreadPool并调用其方法之前，
         * 要确保spring容器已经初始化完毕！
         * 而spring容器的初始化也是由Listener（ContextLoaderListener）完成，
         * 因此只需在web.xml中先配置初始化spring容器的Listener，然后在配置自己的Listener
         */
        RequestThreadPool.getInstance();
    }

    /**
     * 监听器销毁执行的逻辑
     *
     * @param sce
     */
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
         //ServletContext对象被销毁之前(即，当前WEB应用被卸载时)的时候，Servlet容器调用该方法
    }
}
